﻿using System;
using System.Linq;
using DataProcessor.EF;
using Hjt212Parser;
using log4net;

namespace DataProcessor.Process
{
    public class ResponseProcessor
    {
        private static readonly ILog Log = LogManager.GetLogger(typeof(ResponseProcessor));

        public static void Process9011(string content)
        {
            try
            {
                var mn = Parser.GetStringByKey("MN", content);
                if (string.IsNullOrEmpty(mn)) return;
                var info = Util.GetInfoFromMn(mn);
                if (info == null)
                {
                    Log.Warn("MN：" + mn + " 找不到对应企业！");
                    return;
                }
                var qn = Parser.GetStringByKey("QN", content);
                if (string.IsNullOrEmpty(qn)) return;
                //var qnRtn= Parser.GetStringByKey("QnRtn", content);
                //1、处理COD反控
                using (var pCtx = new PlatformXpfContext())
                {
                    var items = pCtx.反控采样.Where(t => t.企业基本信息ID == info.企业基本信息ID).Where(t => t.企业排口ID == info.ID).Where(t => t.QN.Equals(qn)).ToList();
                    foreach (var item in items)
                    {
                        Log.Info("处理COD反控响应指令:9011");
                        item.执行结果标志ID = 602;
                    }
                    pCtx.SaveChanges();
                }
                //2、远程控制门禁
                using (var pCtx = new PlatformXpfContext())
                {
                    var items = pCtx.刷卡及远程充值记录.Where(t => t.企业基本信息ID == info.企业基本信息ID).Where(t => t.企业排口ID == info.ID).Where(t => t.QN.Equals(qn)).ToList();
                    foreach (var item in items)
                    {
                        item.充值状态ID = 602;
                    }
                    pCtx.SaveChanges();
                }
                //3、取样周期设定
                using (var pCtx = new PlatformXpfContext())
                {
                    var items = pCtx.系统参数设置.Where(t => t.参数名称.Contains("取样间隔")).Where(t => t.参数说明.Contains(qn)).ToList();
                    foreach (var item in items)
                    {
                        item.顺序 = 602;
                        item.参数说明 = item.参数说明.Replace("未执行", "正在执行");
                    }
                    pCtx.SaveChanges();
                }
                //4、开卡
                using (var pCtx = new PlatformXpfContext())
                {
                    var items = pCtx.系统参数设置.Where(t => t.参数名称.Contains("卡")).Where(t => t.参数说明.Contains(qn)).ToList();
                    foreach (var item in items)
                    {
                        item.顺序 = 602;
                        item.参数说明 = item.参数说明.Replace("未执行", "正在执行");
                    }
                    pCtx.SaveChanges();
                }

                //4、开卡
            
            }
            catch (Exception ex)
            {
                Log.Error(ex);
                Log.Error(content);
            }
        }

        public static void Process9012(string content)
        {
            try
            {
                var mn = Parser.GetStringByKey("MN", content);
                if (string.IsNullOrEmpty(mn)) return;
                var info = Util.GetInfoFromMn(mn);
                if (info == null)
                {
                    Log.Warn("MN：" + mn + " 找不到对应企业！");
                    return;
                }
                var qn = Parser.GetStringByKey("QN", content);
                if (string.IsNullOrEmpty(qn)) return;
                var exeRtn = Parser.GetStringByKey("ExeRtn", content);
                if (string.IsNullOrEmpty(exeRtn)) return;
                //1、处理COD反控
                using (var pCtx = new PlatformXpfContext())
                {
                    var items = pCtx.反控采样.Where(t => t.企业基本信息ID == info.企业基本信息ID).Where(t => t.企业排口ID == info.ID).Where(t => t.QN.Equals(qn)).ToList();
                    foreach (var item in items)
                    {
                        Log.Info("处理COD反控响应指令:9012");
                        switch (exeRtn)
                        {
                            case "1":
                                item.执行结果标志ID = 603;
                                break;
                            case "4":
                                item.执行结果标志ID = 602;
                                break;
                            case "2":
                                item.执行结果标志ID = 604;
                                break;
                        }

                    }
                    pCtx.SaveChanges();
                }
                //2、远程控制门禁
                using (var pCtx = new PlatformXpfContext())
                {
                    var items = pCtx.刷卡及远程充值记录.Where(t => t.企业基本信息ID == info.企业基本信息ID).Where(t => t.企业排口ID == info.ID).Where(t => t.QN.Equals(qn)).ToList();
                    foreach (var item in items)
                    {
                        switch (exeRtn)
                        {
                            case "1":
                                item.充值状态ID = 603;
                                break;
                            case "4":
                                item.充值状态ID = 602;
                                break;
                            case "2":
                                item.充值状态ID = 604;
                                break;
                        }
                    }
                    pCtx.SaveChanges();
                }
                //3、取样周期设定
                using (var pCtx = new PlatformXpfContext())
                {
                    var items = pCtx.系统参数设置.Where(t => t.参数名称.Contains("取样间隔")).Where(t => t.参数说明.Contains(qn)).ToList();
                    foreach (var item in items)
                    {
                        switch (exeRtn)
                        {
                            case "1":
                                item.顺序 = 603;
                                item.参数说明 = "执行成功";
                                break;
                            case "4":
                                item.顺序 = 602;
                                item.参数说明 = item.参数说明.Replace("未执行", "正在执行");
                                break;
                            case "2":
                                item.顺序 = 604;
                                item.参数说明 = "执行失败";
                                break;
                        }
                        
                    }
                    pCtx.SaveChanges();
                }
                //4、开卡销卡
                using (var pCtx = new PlatformXpfContext())
                {
                    var items = pCtx.系统参数设置.Where(t => t.参数名称.Contains("卡")).Where(t => t.参数说明.Contains(qn)).ToList();
                    foreach (var item in items)
                    {
                        switch (exeRtn)
                        {
                            case "1":
                                item.顺序 = 603;
                                item.参数说明 = "执行成功";
                                break;
                            case "4":
                                item.顺序 = 602;
                                item.参数说明 = item.参数说明.Replace("未执行", "正在执行");
                                break;
                            case "2":
                                item.顺序 = 604;
                                item.参数说明 = "执行失败";
                                break;
                        }

                    }
                    pCtx.SaveChanges();
                }
              
            }
            catch (Exception ex)
            {
                Log.Error(ex);
                Log.Error(content);
            }
        }

        public static void Process9014(string content)
        {
            //try
            //{
            //    var qn = Parser.GetStringByKey("QN", content);
            //    if (string.IsNullOrEmpty(qn)) return;
            //    using (var pCtx = new PlatformXpfContext())
            //    {
            //        var items = pCtx.系统参数设置.Where(t => t.参数名称.Contains("取样间隔")).Where(t => t.参数说明.Contains(qn)).ToList();
            //        foreach (var item in items)
            //        {
            //            item.顺序 = 603;
            //            item.参数说明 = item.参数说明.Replace("未执行", "执行成功").Replace("正在执行", "执行成功");
            //        }
            //        pCtx.SaveChanges();
            //    }
            //}
            //catch (Exception ex)
            //{
            //    Log.Error(ex);
            //    Log.Error(content);
            //}
        }
    }
}
